package com.haiyou.dc.thread;

/**
 * 静态代理：
 * 1、编写公共接口
 * 2、目标类实现公共接口
 * 2、代理类实现公共接口，构造函数注入
 */
public class UserQuery {

    public static void main(String[] args) {
        new SqlDao(new User()).query();
    }
}


/**
 * 公共接口
 */
interface UserDao {
    void query();
}

/**
 * 目标类
 */
class User implements UserDao {

    @Override
    public void query() {
        System.out.println("获取用户信息....");
    }
}

/**
 * 代理类
 */
class SqlDao implements UserDao {

    UserDao userDao;

    public SqlDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void query() {
        this.openDB();
        userDao.query();
        this.closeDB();
    }

    private void openDB() {
        System.out.println("打开数据库....");
    }

    private void closeDB() {
        System.out.println("关闭数据库....");
    }
}